package com.edu.compile.compiler;

import com.edu.compile.AbstractCompileResult;
import com.edu.compile.AbstractCompilerParser;
import com.edu.compile.config.LoopConfig;
import com.edu.compile.template.ftl.block.Loop;
import com.edu.model.dto.NodeMetadata;
import org.springframework.stereotype.Component;

/**
 * for循环中不能嵌套for循环
 * for循环中的if不能直接跟http响应节点
 * for循环中的节点计算的结果一定是数组
 */
@Component("loop_compiler")
public class LoopCompiler extends AbstractCompilerParser<LoopConfig, Loop> {

    @Override
    public void compile(AbstractCompileResult abstractCompileResult, NodeMetadata nodeMetadata, LoopConfig loopConfig, Loop loop) {

//        boolean isLoop = abstractCompileResult.isLoop();
//        CompileResult compileResult = (CompileResult) abstractCompileResult;
//        Loop loop = compileResult.getEventContainer().getNodeTemplateModel(loopBeginNodeDto.getNodeId());
//        loop.setLoop(isLoop);
//
//        String methodPrefix = getMethodPrefix(eventId);
//        LoopParam loopParam = loopBeginNodeDto.getLoopParam();
//        Integer source = loopParam.getSource();
//        String sourceValue = loopParam.getSourceValue();
//        StringBuilder buffer = new StringBuilder(500);
//        String nodeId = loopBeginNodeDto.getNodeId();
//        AbstractCompileResult loopCompileResult = abstractCompileResult.newLoopCompileResult(loopBeginNodeDto);
//
//        if (source == EventConstant.SourceConstant.VAL) {
//            if (StringUtils.isBlank(sourceValue)) {
//                throw new IllegalArgumentException("for循环参数为固定值，必须以'['开始，以']'结尾");
//            }
//            sourceValue = sourceValue.trim();
//            if (!sourceValue.startsWith("[") || !sourceValue.endsWith("]")) {
//                throw new IllegalArgumentException("for循环参数为固定值，必须以'['开始，以']'结尾");
//            }
//            loop.setInput(sourceValue);
//        } else {
//            if (StringUtils.isBlank(sourceValue)) {
//                throw new IllegalArgumentException("for循环参数来自节点，不能为空");
//            }
//            loop.setInput(replaceParam(sourceValue, methodPrefix));
//        }
//        buffer.append(EventConstant.LoopConstant.INIT_NODE_STORAGE_ARRAY);
//
//        next(loopCompileResult, eventId, nodeId);
//        CompileLoopResult compileLoopResult = (CompileLoopResult) loopCompileResult;
//        loop.addInnerNodeIds(compileLoopResult.getLoopNodeSet());
//        loop.setLoopEndNodeId(compileLoopResult.getLoopEndNodeDto().getNodeId());
//        loop.setLoopEndNodeType(compileLoopResult.getLoopEndNodeDto().getNodeType());
//        loop.setLoopEndNodeName(compileLoopResult.getLoopEndNodeDto().getNodeName());
//        next(abstractCompileResult, eventId, compileLoopResult.getLoopEndNodeDto().getNodeId());
    }

}
